diff --git a/system/libraries/Email.php b/system/libraries/Email.php
index 3166e2f..cd89f8f 100644
--- a/system/libraries/Email.php
+++ b/system/libraries/Email.php
@@ -1,4 +1,4 @@
-<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
+<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 /**
  * CodeIgniter
  *
@@ -31,25 +31,25 @@
 	var	$useragent		= "CodeIgniter";
 	var	$mailpath		= "/usr/sbin/sendmail";	// Sendmail path
 	var	$protocol		= "mail";	// mail/sendmail/smtp
-	var	$smtp_host		= "";		// SMTP Server. Example: mail.earthlink.net
+	var	$smtp_host		= "";		// SMTP Server.  Example: mail.earthlink.net
 	var	$smtp_user		= "";		// SMTP Username
 	var	$smtp_pass		= "";		// SMTP Password
 	var	$smtp_port		= "25";		// SMTP Port
 	var	$smtp_timeout	= 5;		// SMTP Timeout in seconds
-	var	$wordwrap		= TRUE;		// TRUE/FALSE Turns word-wrap on/off
+	var	$wordwrap		= TRUE;		// TRUE/FALSE  Turns word-wrap on/off
 	var	$wrapchars		= "76";		// Number of characters to wrap at.
-	var	$mailtype		= "text";	// text/html Defines email formatting
+	var	$mailtype		= "text";	// text/html  Defines email formatting
 	var	$charset		= "utf-8";	// Default char set: iso-8859-1 or us-ascii
 	var	$multipart		= "mixed";	// "mixed" (in the body) or "related" (separate)
 	var $alt_message	= '';		// Alternative message for HTML emails
-	var	$validate		= FALSE;	// TRUE/FALSE. Enables email validation
+	var	$validate		= FALSE;	// TRUE/FALSE.  Enables email validation
 	var	$priority		= "3";		// Default priority (1 - 5)
 	var	$newline		= "\n";		// Default newline. "\r\n" or "\n" (Use "\r\n" to comply with RFC 822)
-	var $crlf			= "\n";		// The RFC 2045 compliant CRLF for quoted-printable is "\r\n". Apparently some servers,
+	var $crlf			= "\n";		// The RFC 2045 compliant CRLF for quoted-printable is "\r\n".  Apparently some servers,
 									// even on the receiving end think they need to muck with CRLFs, so using "\n", while
 									// distasteful, is the only thing that seems to work for all environments.
-	var $send_multipart	= TRUE;		// TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override. Set to FALSE for Yahoo.
-	var	$bcc_batch_mode	= FALSE;	// TRUE/FALSE Turns on/off Bcc batch feature
+	var $send_multipart	= TRUE;		// TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override.  Set to FALSE for Yahoo.
+	var	$bcc_batch_mode	= FALSE;	// TRUE/FALSE  Turns on/off Bcc batch feature
 	var	$bcc_batch_size	= 200;		// If bcc_batch_mode = TRUE, sets max number of Bccs in each batch
 	var $_safe_mode		= FALSE;
 	var	$_subject		= "";
@@ -396,7 +396,7 @@
 	{
 		$this->_attach_name[] = $filename;
 		$this->_attach_type[] = $this->_mime_types(next(explode('.', basename($filename))));
-		$this->_attach_disp[] = $disposition; // Can also be 'inline' Not sure if it matters
+		$this->_attach_disp[] = $disposition; // Can also be 'inline'  Not sure if it matters
 		return $this;
 	}
 
@@ -600,7 +600,7 @@
 		$from = str_replace(">", "", $from);
 		$from = str_replace("<", "", $from);
 
-		return "<".uniqid('').strstr($from, '@').">";
+		return  "<".uniqid('').strstr($from, '@').">";
 	}
 
 	// --------------------------------------------------------------------
@@ -660,15 +660,15 @@
 	 */
 	private function _get_content_type()
 	{
-		if	($this->mailtype == 'html' && count($this->_attach_name) == 0)
+		if	($this->mailtype == 'html' &&  count($this->_attach_name) == 0)
 		{
 			return 'html';
 		}
-		elseif	($this->mailtype == 'html' && count($this->_attach_name) > 0)
+		elseif	($this->mailtype == 'html' &&  count($this->_attach_name)  > 0)
 		{
 			return 'html-attach';
 		}
-		elseif	($this->mailtype == 'text' && count($this->_attach_name) > 0)
+		elseif	($this->mailtype == 'text' &&  count($this->_attach_name)  > 0)
 		{
 			return 'plain-attach';
 		}
@@ -881,7 +881,7 @@
 
 		// Use PHP's native public function to do the initial wordwrap.
 		// We set the cut flag to FALSE so that any individual words that are
-		// too long get left alone. In the next step we'll deal with them.
+		// too long get left alone.  In the next step we'll deal with them.
 		$str = wordwrap($str, $charlim, "\n", FALSE);
 
 		// Split the string into individual lines of text and cycle through them
@@ -999,7 +999,7 @@
 	 */
 	private function _build_message()
 	{
-		if ($this->wordwrap === TRUE AND $this->mailtype != 'html')
+		if ($this->wordwrap === TRUE  AND  $this->mailtype != 'html')
 		{
 			$this->_body = $this->word_wrap($this->_body);
 		}
@@ -1135,7 +1135,7 @@
 				return FALSE;
 			}
 
-			$h = "--".$this->_atc_boundary.$this->newline;
+			$h  = "--".$this->_atc_boundary.$this->newline;
 			$h .= "Content-type: ".$ctype."; ";
 			$h .= "name=\"".$basename."\"".$this->newline;
 			$h .= "Content-Disposition: ".$this->_attach_disp[$i].";".$this->newline;
@@ -1237,7 +1237,7 @@
 				// encode = signs
 				if ($ascii == '61')
 				{
-					$char = $escape.strtoupper(sprintf('%02s', dechex($ascii))); // =3D
+					$char = $escape.strtoupper(sprintf('%02s', dechex($ascii)));  // =3D
 				}
 
 				// If we're at the character limit, add the line to the output,
@@ -1267,7 +1267,7 @@
 	/**
 	 * Prep Q Encoding
 	 *
-	 * Performs "Q Encoding" on a string for use in email headers. It's related
+	 * Performs "Q Encoding" on a string for use in email headers.  It's related
 	 * but not identical to quoted-printable, so it has its own method
 	 *
 	 * @access	public
@@ -1349,7 +1349,7 @@
 			$this->reply_to($this->_headers['From']);
 		}
 
-		if (( ! isset($this->_recipients) AND ! isset($this->_headers['To'])) AND
+		if (( ! isset($this->_recipients) AND ! isset($this->_headers['To']))  AND
 			( ! isset($this->_bcc_array) AND ! isset($this->_headers['Bcc'])) AND
 			( ! isset($this->_headers['Cc'])))
 		{
@@ -1359,7 +1359,7 @@
 
 		$this->_build_headers();
 
-		if ($this->bcc_batch_mode AND count($this->_bcc_array) > 0)
+		if ($this->bcc_batch_mode  AND  count($this->_bcc_array) > 0)
 		{
 			if (count($this->_bcc_array) > $this->bcc_batch_size)
 				return $this->batch_bcc_send();
@@ -1380,7 +1380,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * Batch Bcc Send. Sends groups of BCCs in batches
+	 * Batch Bcc Send.  Sends groups of BCCs in batches
 	 *
 	 * @access	public
 	 * @return	bool
@@ -1752,7 +1752,7 @@
 	// --------------------------------------------------------------------
 
 	/**
-	 * SMTP Authenticate
+	 *  SMTP Authenticate
 	 *
 	 * @access	private
 	 * @return	bool
@@ -1764,7 +1764,7 @@
 			return TRUE;
 		}
 
-		if ($this->smtp_user == "" AND $this->smtp_pass == "")
+		if ($this->smtp_user == ""  AND  $this->smtp_pass == "")
 		{
 			$this->_set_error_message('lang:email_no_smtp_unpw');
 			return FALSE;
